HTML转word
背景介绍
业务:将平台中笔记(富文本)以word形式导出。
1. 使用POI进行转化
依赖jar
poi-3.17.jar
poi-excelant-3.17.jar
poi-ooxml-3.17.jar
poi-ooxml-schemas-3.17.jar
jsoup-1.11.3.jar
1.1 思路
a). 获取HTML
b). HTML标准化
c). 转化
1.2 代码示例
/**
* HTML转word
*
* @param noteName 导出文件名称
* @paramre portDirName 文件路径
* @param researchNoteInfo 文件的html
* @return void
* @author Solitary
* @date 2019/1/11 9:21
*/
public static void htmlToWord(String noteName, String reportDirName, String researchNoteInfo) throws Exception {
//拼一个标准的HTML格式文档
Document document = Jsoup.parse(researchNoteInfo);
FileUtils.fileIsExist(reportDirName);
InputStream is = new ByteArrayInputStream(document.html().getBytes("GBK"));
OutputStream os = new FileOutputStream(reportDirName+noteName);
inputStreamToWord(is, os);
}
/**
* 把is写入到对应的word输出流os中
*
* @param is
* @param os
* @throws IOException
*/
private static void inputStreamToWord(InputStream is, OutputStream os) throws IOException {
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryNode root = fs.getRoot();
root.createDocument("WordDocument", is);
fs.writeFilesystem(os);
os.close();
is.close();
}
1.3 思考
使用poi进行HTML转word的确很简单的,但是一个很棘手的问题就是当图片资源失效、断网的情况下,word的图片无法显示。所以使用这种方式转word显得有点鸡肋了。
2. 使用jacob进行转化
依赖jar
jacob.jar
jsoup-1.11.3.jar
2.1 思路
a). 标准化HTML
b). 下载图片资源到本地
c). 替换所有img标签为<p>${img_imgName}</p>
d). 将替换后的HTML写入空白文档doc中
e). 复制上一步写入文档的内容,替换所有${img_imgName}为本地图片路径
f). 另存为doc文件
2.2 代码示例
/**
* 创建空白文档_写入html_处理空白文档image_复制空白文档至最终文档
*
* @param imgs
* @param html
* @param localpath
*/
public static String getWord(String html, String localpath, long researchId) {
// 下载图片到本地 略
// 图片在文档中的键${name} - 值图片的绝对路径 imgMap.put("${ABC}", localpath + "\\ABC.png")